﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AtletIS.DomainModel.Entities.Main;

namespace AtletIS.Repository
{
    public interface IAtletisRepository
    {
        // Categories
        List<Category> GetAllCategories();
        List<Category> GetActiveCategories();

        // Disciplines
        List<Discipline> GetAllDisciplines();
        List<Discipline> GetActiveDisciplines();
        List<Discipline> GetDistinctDisciplines(int competitionId);
        
        // Competitions
        List<Competition> GetAllCompetitions(int year);
        List<Competition> GetActiveCompetitions();

        // DisciplineList
        List<DisciplineList> GetDisciplineListByCompetitionId(int competitionId, bool getChildren);

        // CheckPoints
        List<CheckPoint> GetCheckPointsByDisciplineListId(int disciplineListId, bool excludeExtra, int? order);
        CheckPoint GetStartCheckPoint(int disciplineListId);
        CheckPoint GetFinishCheckPoint(int disciplineListId);

        // Performances
        List<Performance> GetPerformancesByDisciplineListId(int disciplineListId);
        List<Performance> GetPerformancesByDisciplineId(int competitionId, int disciplineId);
        List<Performance> GetPerformancesByCompetitionId(int competitionId);
        List<Performance> GetPerformancesByCompetitionId(int competitionId, int startNumber);
        List<Performance> GetPerformancesByCompetitionId(int competitionId, string surname);
        List<Performance> GetPerformancesByCompetitionId(int competitionId, string countryId, string clubId);

        // ExtTexts
        List<ExtText> GetExtTextsByDisciplineListId(int disciplineListId, bool getExtTextsForPerformances);
        List<ExtText> GetExtTextsByPerformanceId(int performanceId, string header);

        // Countries
        Country GetCountryById(string id);
        List<Country> GetAllCountries();
        List<Country> GetDistinctCountries(int competitionId);

        // Clubs
        Club GetClubById(string id);
        List<Club> GetAllClubs();
        List<Club> GetActiveClubs();
        List<Club> GetDistinctClubs(int competitionId);

        // Competitors
        List<Competitor> GetCompetitorsByCountryId(string countryId);
        List<Competitor> GetCompetitorsByClubId(string clubId);

        // ChipTagsGroups
        List<ChipTagsGroup> GetAllChipTagsGroups();

        // ChipTags
        List<ChipTag> GetChipTags(int chipTagsGroupId);

        //TODO: ChipData, systemove ciselniky

    }
}
